/**
 * Multiworker 2000
 * @brief Classe de conexão
 * @author André Luiz de Oliveira Vasconcelos
 * @file conexao.cpp
 * @date 2011
 */

#include "conexao.h"
#include <QDebug>

/**
 * Construtor
 */
Conexao::Conexao()
{
}

/**
 * Destrutor
 */
Conexao::~Conexao()
{
}

/**
 * setBanco
 * @brief Seta o nome do banco usado na conexão
 * @author André Luiz Vasconcelos
 * @param banco Nome do banco
 */
void Conexao::setBanco(QString banco)
{
    this->banco = banco;
}

/**
 * getBanco
 * @brief Retorna o nome do banco
 * @author André Luiz Vasconcelos
 * @return QString Nome do banco
 */
QString Conexao::getBanco()
{
    return this->banco;
}

/**
 * setServidor
 * @brief Seta o nome ou endereço do servidor
 * @author André Luiz Vasconcelos
 * @param servidor Nome ou endereço do servidor
 */
void Conexao::setServidor(QString servidor)
{
    this->servidor = servidor;
}

/**
 * getServidor
 * @brief Retorna o nome ou endereço do servidor
 * @author André Luiz Vasconcelos
 * @return QString Nome ou endereço do servidor
 */
QString Conexao::getServidor()
{
    return this->servidor;
}

/**
 * setUsuarioBanco
 * @brief Seta o nome do usuário do banco de dados
 * @author André Luiz Vasconcelos
 * @param usuarioBanco Nome do usuário do banco de dados
 */
void Conexao::setUsuarioBanco(QString usuarioBanco)
{
    this->usuarioBanco = usuarioBanco;
}

/**
 * getUsuarioBanco
 * @brief Retorna nome do usuário do banco de dados
 * @author André Luiz Vasconcelos
 * @return QString Nome do usuário do banco de dados
 */
QString Conexao::getUsuarioBanco()
{
    return this->usuarioBanco;
}

/**
 * setSenhaUsuarioBanco
 * @brief Seta senha do usuário do banco de dados
 * @author André Luiz Vasconcelos
 * @param senhaUsuarioBanco Senha do usuário do banco de dados
 */
void Conexao::setSenhaUsuarioBanco(QString senhaUsuarioBanco)
{
    this->senhaUsuarioBanco = senhaUsuarioBanco;
}

/**
 * getSenhaUsuarioBanco
 * @brief Retorna a senha do usuário do banco de dados
 * @author André Luiz Vasconcelos
 * @return QString Senha do usuário do banco de dados
 */
QString Conexao::getSenhaUsuarioBanco()
{
    return this->senhaUsuarioBanco;
}

/**
 * open
 * @brief Abre conexão com o banco de dados
 * @author André Luiz Vasconcelos
 * @return Mensagem de resultado da operação
 */
Mensagem Conexao::open()
{
    Mensagem mensagem;
    this->db = QSqlDatabase::addDatabase("QOCI");
    this->db.setDatabaseName(this->getBanco());
    this->db.setUserName(this->getUsuarioBanco());
    this->db.setPassword(this->getSenhaUsuarioBanco());
    this->db.setHostName(this->getServidor());

    if(!this->db.open()){
        mensagem.setErro(QObject::tr("Erro na conexão com o banco de dados. %1").arg(this->db.lastError().databaseText()));
    }
    return mensagem;
}

/**
 * close
 * @brief Fecha conexão com o banco de dados
 * @author André Luiz Vasconcelos
 */
void Conexao::close()
{
    this->db.close();
}

/**
 * rollback
 * @brief Executa rollback na transação, mantendo a conexão aberta
 * @author André Luiz Vasconcelos
 * @TODO Implementar
 */
void Conexao::rollback()
{
}

/**
 * commit
 * @brief Comita a transação, mantendo a conexão aberta
 * @author André Luiz Vasconcelos
 * @TODO Implementar
 */
void Conexao::commit()
{
}

/**
 * rollbackAndClose
 * @brief Executa rollback na transação, fechando a conexão
 * @author André Luiz Vasconcelos
 * @TODO Implementar
 */
void Conexao::rollbackAndClose()
{
}

/**
 * commit
 * @brief Comita a transação, fechando a conexão 
 * @author André Luiz Vasconcelos
 * @TODO Implementar
 */
void Conexao::commitAndClose()
{
}

/**
 * executaQuery
 * @brief Submete uma query ao banco de dados
 * @author André Luiz Vasconcelos
 * @param sql Comando SQL a ser submetido ao banco
 * @TODO Implementar
 */
Mensagem Conexao::executaQuery(QString sql)
{
    Mensagem mensagem;

    return mensagem;
}

/**
 * executaDML
 * @brief Submete um comando DML ao banco de dados
 * @author André Luiz Vasconcelos
 * @param sql Comando DML a ser submetido ao banco
 * @TODO Implementar
 */
Mensagem Conexao::executaDML(QString sql)
{
    Mensagem mensagem;

    return mensagem;
}
